package com.srtp.secureprotocol.cipherstream;

import java.io.InputStream;

/**
 * 加密文件流实现类，继承自抽象类CipherFile
 * 封装加密文件流的输入流和长度属性
 */
public class CipherFileStream extends CipherFile {

    private final InputStream inputStream;  // 封装的输入流（不可变）
    private final long length;              // 数据长度（单位：字节，不可变）

    /**
     * 构造方法创建加密文件流
     *
     * @param inputStream 输入流（不可为空）
     * @param length      数据长度（必须大于0）
     * @throws IllegalArgumentException 如果参数不满足要求
     */
    public CipherFileStream(InputStream inputStream, long length) {
        // 参数有效性检查（通常在Builder中已检查，此处为防御性编程）
        if (inputStream == null) {
            throw new IllegalArgumentException("输入流不能为空");
        }
        if (length <= 0) {
            throw new IllegalArgumentException("无效长度: " + length + " (必须大于0)");
        }

        this.inputStream = inputStream;
        this.length = length;
    }

    /**
     * 获取封装的输入流
     *
     * @return 不可变的输入流对象
     */
    public InputStream getInputStream() {
        return inputStream;
    }

    /**
     * 获取数据长度
     *
     * @return 数据字节长度（始终大于0）
     */
    public long getLength() {
        return length;
    }
}
